package com.yangjian.web;

import com.yangjian.bean.User;
import com.yangjian.comon.R;
import com.yangjian.dto.Code;
import com.yangjian.service.UserService;
import com.yangjian.util.ValidateCodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.concurrent.TimeUnit;

@Slf4j
@RestController
public class UserController {


    @Autowired
    private UserService userService;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 获取验证码
     *
     * @param phone
     * @param
     * @return
     */
    @GetMapping("/sms/code")
    public R VerificationCode(String phone) {

        //生成验证码
        String code = ValidateCodeUtils.generateValidateCode4String(6);
        //将验证码保存到session作用域去，名称是电话号码
        //session.setAttribute(phone, code);
        //System.out.println("code = " + code);

        //使用redis 存储验证码。并设置时间为5分钟
        ValueOperations opsForValue = redisTemplate.opsForValue();
        String key="login_"+phone;
        opsForValue.set(key,code,5, TimeUnit.MINUTES);

        //返回验证码
        return R.success(code);

    }

    @PostMapping("/user/login")
    public R login(@RequestBody Code code, HttpSession session) {

        System.out.println("code = " + code);

        //取出存在session的验证码
        //String code1 = (String) session.getAttribute(code.getPhone());
        ValueOperations valueOperations = redisTemplate.opsForValue();
        String code1 = (String) valueOperations.get("login_"+code.getPhone());
        //获取电话和验证码
        String code2 = code.getCode();
        String phone = code.getPhone();
        //校验验证码是否正确
        if (code1.equals(code2)) {

            //拿电话去查询用户的信息
            User user = userService.findByFhone(phone);

            //判断用户表里有没有用户
            if (user == null) {
                //如果没有就新建一个用户
                user = new User();
                //如果是第一次登录，就把这个账号添加到数据库中
                user.setName(phone);
                user.setPhone(phone);
                user.setStatus(1);
                userService.add(user);
            }
            //把查询出来从信息保存session作用域中，便于后期使用
            session.setAttribute("user", user);

            //登录成功后就把存储在redis数据库中的数据清除掉
            redisTemplate.delete("login_"+code.getPhone());
            return R.success("登录成功");
        }else {


            return R.error("验证码不正确");
        }


    }

    /**
     * 手机端退出登录
     * @param session
     * @return
     */

    @PostMapping("/user/loginout")
    public R loginOut( HttpSession session){
        //清除保存在session的数据
        session.removeAttribute("user");
        //响应页面
        return R.success("退出成功");


    }

}
